package com.benshou.bsoa.dto.xinchou.res;

import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;


/*
 * 薪酬档案响应参数
 */
@Data
public class SalaryArchiveResponse {
    private String errorCode;    // 返回结果的状态码
    private String errorMsg;     // 返回结果的状态信息
    private Boolean bizSuccess;  // 业务是否成功
    private Result result;       // 结果数据

    @Data
    public static class Result {
        private List<Label> labelList; // 字段说明列表
        private List<SalaryData> list;  // 返回的数据内容
        private int size;                 // 业务数据条数
        private long total;               // 总条数

        @Data
        public static class Label {
            private String biz;          // 业务标识
            private String fieldName;    // 字段名称
            private String label;        // 字段说明
            private int type;            // 字段类型
        }

        @Data
        public static class SalaryData {
            private Long employeeId;   // 员工ID
            private List<ProjectDetail> projectDetailList;  // 项目详细信息
            private List<SalaryArchiveDetail> salaryArchivesList;  // 薪资档案详细数据

            @Data
            public static class ProjectDetail {
                private String projectName;  // 项目名称
                private Boolean probation;   // 是否有试用期
                private Integer probateSalary;   // 试用期薪资
                private Integer regularSalary;   // 转正后薪资
            }

            @Data
            public static class SalaryArchiveDetail {
                @JsonProperty("effect_date")
                private String effectDate;  // 薪资生效日期

                @JsonProperty("start_date")
                private String startDate;  // 起薪日期

                @JsonProperty("end_date")
                private String endDate;    // 最后发薪日

                @JsonProperty("tax_option")
                private TaxOption taxOption;  // 缴税类型

                @JsonProperty("event_reason")
                private List<EventReason> eventReason;  // 薪资异动原因

                private String remark;     // 备注

                @JsonProperty("department")
                private List<Department> department;  // 发薪组织

                @JsonProperty("salary_plan")
                private SalaryPlan salaryPlan;  // 薪资计划

                @Data
                public static class TaxOption {
                    @JsonProperty("tax_option_id")
                    private Integer taxOptionId;  // 缴税选项ID

                    @JsonProperty("tax_option_value")
                    private String taxOptionValue;  // 缴税选项值
                }

                @Data
                public static class EventReason {
                    private Integer id;  // 异动原因ID
                    private String value;  // 异动原因描述
                }

                @Data
                public static class Department {
                    private Integer id;  // 发薪组织ID
                    private String value;  // 发薪组织名称
                }

                @Data
                public static class SalaryPlan {
                    @JsonProperty("salary_plan_id")
                    private Long salaryPlanId;  // 薪资计划ID

                    @JsonProperty("salary_plan_value")
                    private String salaryPlanValue;  // 薪资计划值
                }
            }
        }
    }
}

